#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
//按键
#include <QKeyEvent>
//定时器
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

//定义蛇的四个移动方向
enum Dirct{DIR_LEFT,DIR_RIGHT,DIR_DOWN,DIR_UP};

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:
    //绘制游戏界面
    void paintEvent(QPaintEvent *event);

    //处理按键控制蛇的移动
    void keyPressEvent(QKeyEvent *event);

    //根据蛇的当前方向在蛇身不同位置添加新的方块
    void addTop();
    void addDown();
    void addLeft();
    void addRight();

    //删除蛇尾的一个方块
    void deleteLast();

    //添加新奖品的方块
    void addNewReword();

    //判断蛇头是否碰到蛇身，发生碰撞则游戏结束
    bool checkContact();

private:
    Ui::Widget *ui;
    //蛇的当前移动方向，初始化向上
    int moveFlag = DIR_UP;

    //定义游戏开始
    bool gameStart = false;

    //定义定时器
    QTimer *timer;
    int time = 100;//超时事件间隔(单位是毫秒)

    //用来表示蛇的身体
    QList <QRectF> snake;

    //小方块
    int nodeWidth = 20;
    int nodeHeight = 20;

    //奖品的位置
    QRectF rewardNode;

    //当前得分
    int score = 0;

    //游戏结束标志
    bool gameOver;

    //重置游戏
    void resetGame();

protected slots:
    //超时函数，更新蛇的位置并检查游戏状态
    void timeout();
};


#endif // WIDGET_H
